Software development conventionally starts with the creation of a logical model reflecting the functional requirements of the particular process for which the software is to be developed. At some point of this model-driven approach, the logical model has to be transformed into a physical representation or artifact (such as a code representation) that additionally satisfies non-functional requirements. Among the non-functional requirements are the technical constraints of the particular software and hardware platform, including the programming language, that have to be taken into account.
For generating the physical code, a set of rules and patterns will have to be applied to the logical model. For example, in some cases, the software architecture defines different kinds of classes. A first kind a classes may represent persistent entities, while a second kind of classes represents processes or process steps. Whether a specific element of the logical model is an entity or a process is of course a functional issue. However, the way how a logical entity will eventually be transformed into the corresponding physical representation is generally the same for all logical entities, and the same holds for the transformation of logical processes.
To assist a software developer in his work and to automate as many steps as possible in the software development process, generative software development approaches have been introduced. Generative software development exploits the fact that the step from a logical model to the physical artifact can be regarded as the application of a set of transformation rules to the various elements of the logical model. So basically one has to define the individual transformations, specify when to apply them and annotate the logical model with some control information that controls the automated transformation process.
Transformations are typically defined via templates. For each of the different physical artifacts that need to be generated, a separate template or set of templates will have to be provided. The templates include transformation logic specifying how the individual elements of the logical model are to be transformed into their physical counterparts. The logical model, in turn, includes annotations specifying which template to use for a particular type of model element. In an conventional UML (Unified Modeling Language) scenario, the annotations are for example constituted by stereotypes or tagged values.
Since not everything can be defined in the model, certain procedural aspects can be defined by programming inside the generated physical constructs. Therefore, a model may include protected sections in which the developer can directly write program code that is to be protected from the transformation run. The protected section guarantees that the manually entered code survives changes in the model. So even if the model is (e.g. iteratively) changed, the code in the protected sections will still remain in the same logical place.
Today, there are attempts to apply the concept of model-driven development (MDD) to the service paradigm underlying the so-called service-oriented architecture (SOA). The SOA aims at providing the functionalities of a complex software component via individual services. In the SOA context, individual services may be used and re-used, rather than copying the corresponding program code or, more generally, the physical artifact. This becomes possible as the service is abstracted away from a particular platform-specific implementation.
In conventional SOAs the individual services are merely regarded as “black boxes” with interfaces to other services. In other words, the internal structure of the services does not play a major role for the implementation of a SOA. However, when applying the principles of MDD to the modeling of individual services, the internal structure of the service model is of course an important aspect.
Therefore, the object underlying the invention generally relates to an efficient combination of MDD with SOA. In particular, a technique for efficiently modeling a service for generative software development is required.